package Problem;

import java.util.Scanner;

public class 跳台阶plus {
		//小蓝要上一个楼梯，楼梯共有n级台阶（即小蓝总共要走n级）。小蓝每一步可以走 a级，b级，c级，请问共有多少种方案上楼？
    static int[]dp;
    static int[]a;
    static int M=1000000007;
    public static void main(String[] args) {//记忆化搜索
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        a=new int[n];
        dp=new int[n+1];
        for(int i=0;i<3;i++) a[i]=sc.nextInt();
        System.out.println(f(n));
    }
    public static int f(int n) {
        if(n<0) return 0;//不能走回起点
        if(dp[n]!=0) return dp[n];
        if(n==0) return 1;//能走回起点，方案数+1
        return dp[n]=((f(n-a[0])+f(n-a[1]))%M+f(n-a[2]))%M;//记得每一步都要取模
    }

}

//import java.util.Scanner;
////1:无需package
////2: 类名必须Main, 不可修改
//
//public class Main {
// public static void main(String[] args) {//递推
//      int M= 1000000007;
//             Scanner sc=new Scanner(System.in);
//             int n=sc.nextInt();
//             int[]dp=new int[n+1];
//             int[]w=new int[3];
//             for(int i=0;i<3;i++) {
//                 w[i]=sc.nextInt();
//                 dp[w[i]]=1;
//             }
//             for(int i=1;i<=n;i++) {
//                 for(int j=0;j<=2;j++) {
//                     if(i-w[j]>=0) dp[i]=(dp[i]+dp[i-w[j]])%M;
//                 }
//             }
//             System.out.println(dp[n]%M);
// }
//}
